package com.xdcplus.web.service.alarm;

import com.xdcplus.mp.service.BaseService;
import com.xdcplus.pager.vo.PageVO;
import com.xdcplus.web.common.pojo.dto.alarm.ToolAlarmCodeDTO;
import com.xdcplus.web.common.pojo.dto.alarm.ToolAlarmCodeFilterDTO;
import com.xdcplus.web.common.pojo.dto.alarm.ToolAlarmCodeUpdateDTO;
import com.xdcplus.web.common.pojo.entity.alarm.ToolAlarmCode;
import com.xdcplus.web.common.pojo.vo.alarm.ToolAlarmCodeExportVO;
import com.xdcplus.web.common.pojo.vo.alarm.ToolAlarmCodeVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


/**
 * 设备告警码表(ToolAlarmCode)表服务接口层
 *
 * @author bullion.yan
 * @since 2024-06-05 16:16:14
 */
public interface ToolAlarmCodeService extends BaseService<ToolAlarmCode, ToolAlarmCode, ToolAlarmCodeVO> {

    /**
     * 添加设备告警码表(ToolAlarmCode)
     *
     * @param toolAlarmCodeDTO 设备告警码表(ToolAlarmCodeDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveToolAlarmCode(ToolAlarmCodeDTO toolAlarmCodeDTO);

    List<ToolAlarmCode> queryByGroupIdFk(Long groupIdFk);

    public List<ToolAlarmCodeExportVO> queryExportToolAlarmCode(Long groupIdFk);

    /**
     * 修改设备告警码表(ToolAlarmCode)
     *
     * @param toolAlarmCodeUpdateDTO 设备告警码表(ToolAlarmCodeDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean updateToolAlarmCode(ToolAlarmCodeUpdateDTO toolAlarmCodeUpdateDTO);

    /**
     * 批量保存或更新设备告警码表(ToolAlarmCode)
     *
     * @param toolAlarmCodeList 设备告警码表(ToolAlarmCodeList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatch(List<ToolAlarmCode> toolAlarmCodeList);

    /**
     * 批量保存或更新设备告警码表(ToolAlarmCodeDTOList)
     *
     * @param toolAlarmCodeDTOList 设备告警码表(ToolAlarmCodeDTOList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatchByDTOList(List<ToolAlarmCodeDTO> toolAlarmCodeDTOList);

    /**
     * 删除设备告警码表(ToolAlarmCode)
     *
     * @param id 设备告警码表(ToolAlarmCode)主键
     * @return {@link Boolean} 是否成功
     */
    Boolean deleteToolAlarmCodeLogical(Long id);
    
    Boolean deleteToolAlarmCodeByIds(String ids);

    /**
     * 查询设备告警码表(ToolAlarmCode)
     *
     * @param toolAlarmCodeFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<ToolAlarmCodeVO>} 状态信息
     */
    List<ToolAlarmCodeVO> queryToolAlarmCodeVOList(ToolAlarmCodeFilterDTO toolAlarmCodeFilterDTO);

    /**
     * 查询设备告警码表(ToolAlarmCode)
     *
     * @param toolAlarmCodeFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<ToolAlarmCodeVO>} 状态信息
     */
    PageVO<ToolAlarmCodeVO> queryToolAlarmCode(ToolAlarmCodeFilterDTO toolAlarmCodeFilterDTO);

    /**
     * 查询一个
     *
     * @param id 设备告警码表(ToolAlarmCode)主键
     * @return {@link ToolAlarmCodeVO} 设备告警码表(ToolAlarmCode)信息
     */
    ToolAlarmCodeVO queryToolAlarmCodeById(Long id);

    void importAlarmCode(MultipartFile file, Long groupIdFk, HttpServletResponse response, String operatorUserName) throws IOException;

    void exportAlarmCode(Long groupIdFk, HttpServletResponse response,String operatorUserName) throws IOException;

    List<ToolAlarmCode> queryByAlarmCodeList(List<String> alarmCodeList);

    /**
     * 根据告警代码查询告警代码信息
     *
     * @param alarmCode 报警编码
     * @return {@link ToolAlarmCodeVO }
     */
    ToolAlarmCodeVO queryToolAlarmCodeByAlarmCode(String alarmCode);


}
